home *** CD-ROM | disk | FTP | other *** search
/ ADA Programming Guide / ADA Programming Guide.iso / ada_lrm / chapc.doc < prev    next >
Text File  |  1996-01-30  |  14KB  |  530 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6. The following document is a draft  of  the  corresponding  chapter  of  the
  7. version  of  the  Ada  Reference  Manual  produced  in response to the Ansi
  8. Canvass.  It is given a limited circulation  to  Ada  implementers  and  to
  9. other groups contributing comments (according to the conventions defined in
  10. RRM.comments).  This draft should not be referred to in any publication.
  11.  
  12.  
  13.  
  14.                        ANSI-RM-C-v23 - Draft Chapter
  15.                     C  Predefined Language Environment
  16.                                 version 23
  17.  
  18.  
  19.                                  83-02-11
  20.  
  21.  
  22. This version has addressed all comments up to #5795
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.  
  71.  
  72.  
  73.  
  74.  
  75.  
  76.  
  77.                     C. Predefined Language Environment
  78.  
  79.  
  80.  
  81.  
  82. This  annex  outlines  the specification of the package STANDARD containing
  83. all predefined identifiers in the language.  The corresponding package body
  84. is implementation-defined and is not shown.
  85.  
  86. The operators that are predefined for the types  declared  in  the  package
  87. STANDARD are given in comments since they are implicitly declared.  Italics
  88. are  used for  pseudo-names of anonymous types (such as universal_real) and
  89. for   undefined   information   (such   as    implementation_defined    and
  90. any_fixed_point_type).
  91.  
  92. package STANDARD is
  93.  
  94.    type BOOLEAN is (FALSE, TRUE);
  95.  
  96.    -- The predefined relational operators for this type are as follows:
  97.  
  98.    -- function "="   (LEFT, RIGHT : BOOLEAN) return BOOLEAN;
  99.    -- function "/="  (LEFT, RIGHT : BOOLEAN) return BOOLEAN;
  100.    -- function "<"   (LEFT, RIGHT : BOOLEAN) return BOOLEAN;
  101.    -- function "<="  (LEFT, RIGHT : BOOLEAN) return BOOLEAN;
  102.    -- function ">"   (LEFT, RIGHT : BOOLEAN) return BOOLEAN;
  103.    -- function ">="  (LEFT, RIGHT : BOOLEAN) return BOOLEAN;
  104.  
  105.    -- The predefined logical operators and the predefined logical negation operator are as follows:
  106.  
  107.    -- function "and" (LEFT, RIGHT : BOOLEAN) return BOOLEAN;
  108.    -- function "or"  (LEFT, RIGHT : BOOLEAN) return BOOLEAN;
  109.    -- function "xor" (LEFT, RIGHT : BOOLEAN) return BOOLEAN;
  110.  
  111.    -- function "not" (RIGHT : BOOLEAN) return BOOLEAN;
  112.  
  113.  
  114.  
  115.    -- The universal type universal_integer is predefined.
  116.  
  117.  
  118.    type INTEGER is IMPLEMENTATION_DEFINED;
  119.  
  120.    -- The predefined operators for this type are as follows:
  121.  
  122.    -- function "="  (LEFT, RIGHT : INTEGER) return BOOLEAN;
  123.    -- function "/=" (LEFT, RIGHT : INTEGER) return BOOLEAN;
  124.    -- function "<"  (LEFT, RIGHT : INTEGER) return BOOLEAN;
  125.    -- function "<=" (LEFT, RIGHT : INTEGER) return BOOLEAN;
  126.    -- function ">"  (LEFT, RIGHT : INTEGER) return BOOLEAN;
  127.  
  128.  
  129.                                    C - 1
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136.  
  137.  
  138.    -- function ">=" (LEFT, RIGHT : INTEGER) return BOOLEAN;
  139.  
  140.  
  141.  
  142.  
  143.  
  144.  
  145.  
  146.  
  147.  
  148.  
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174.  
  175.  
  176.  
  177.  
  178.  
  179.  
  180.  
  181.  
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
  195.                                    C - 2
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202.  
  203.  
  204.    -- function "+"   (RIGHT : INTEGER) return INTEGER;
  205.    -- function "-"   (RIGHT : INTEGER) return INTEGER;
  206.    -- function "abs" (RIGHT : INTEGER) return INTEGER;
  207.  
  208.    -- function "+"   (LEFT, RIGHT : INTEGER) return INTEGER;
  209.    -- function "-"   (LEFT, RIGHT : INTEGER) return INTEGER;
  210.    -- function "*"   (LEFT, RIGHT : INTEGER) return INTEGER;
  211.    -- function "/"   (LEFT, RIGHT : INTEGER) return INTEGER;
  212.    -- function "rem" (LEFT, RIGHT : INTEGER) return INTEGER;
  213.    -- function "mod" (LEFT, RIGHT : INTEGER) return INTEGER;
  214.  
  215.    -- function "**"  (LEFT : INTEGER; RIGHT : INTEGER) return INTEGER;
  216.  
  217.       -- An implementation may provide additional predefined integer types.
  218.       It is recommended that -- the names of such additional types end with
  219.       INTEGER as in SHORT_INTEGER  or  LONG_INTEGER.  -- The  specification
  220.       of   each  operator  for  the  type  universal_integer,  or  for  any
  221.       additional -- predefined  integer  type,  is  obtained  by  replacing
  222.       INTEGER  by  the  name of the type  in  the -- specification  of  the
  223.       corresponding  operator  of the type INTEGER, except for the right --
  224.       operand of the exponentiating operator.
  225.  
  226.  
  227.       -- The universal type universal_real is predefined.
  228.  
  229.    type FLOAT is IMPLEMENTATION_DEFINED;
  230.  
  231.    -- The predefined operators for this type are as follows:
  232.  
  233.    -- function "="   (LEFT, RIGHT : FLOAT) return BOOLEAN;
  234.    -- function "/="  (LEFT, RIGHT : FLOAT) return BOOLEAN;
  235.    -- function "<"   (LEFT, RIGHT : FLOAT) return BOOLEAN;
  236.    -- function "<="  (LEFT, RIGHT : FLOAT) return BOOLEAN;
  237.    -- function ">"   (LEFT, RIGHT : FLOAT) return BOOLEAN;
  238.    -- function ">="  (LEFT, RIGHT : FLOAT) return BOOLEAN;
  239.  
  240.    -- function "+"   (RIGHT : FLOAT) return FLOAT;
  241.    -- function "-"   (RIGHT : FLOAT) return FLOAT;
  242.    -- function "abs" (RIGHT : FLOAT) return FLOAT;
  243.  
  244.    -- function "+"   (LEFT, RIGHT : FLOAT) return FLOAT;
  245.    -- function "-"   (LEFT, RIGHT : FLOAT) return FLOAT;
  246.    -- function "*"   (LEFT, RIGHT : FLOAT) return FLOAT;
  247.    -- function "/"   (LEFT, RIGHT : FLOAT) return FLOAT;
  248.  
  249.    -- function "**"  (LEFT : FLOAT; RIGHT : INTEGER) return FLOAT;
  250.  
  251.       -- An  implementation  may  provide  additional  predefined  floating
  252.       point  types.   It  is --  recommended   that   the   names  of  such
  253.       additional  types  end with FLOAT as in SHORT_FLOAT or -- LONG_FLOAT.
  254.       The specification of each operator for the type  universal_real,   or
  255.       for   any -- additional  predefined  floating point type, is obtained
  256.       by replacing FLOAT by the name of -- the type in the specification of
  257.       the  corresponding  operator  of  the  type  FLOAT.
  258.  
  259.  
  260.  
  261.                                    C - 3
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268.  
  269.  
  270.  
  271.  
  272.       -- In addition, the following operators are predefined for  universal
  273.       types:
  274.  
  275.    -- function "*" (LEFT : universal_integer; RIGHT : universal_real)    return universal_real;
  276.    -- function "*" (LEFT : universal_real;    RIGHT : universal_integer) return universal_real;
  277.    -- function "/" (LEFT : universal_real;    RIGHT : universal_integer) return universal_real;
  278.  
  279.    -- The type universal_fixed is predefined.  The only operators declared for this type are
  280.  
  281.    -- function "*" (LEFT : any_fixed_point_type; RIGHT : any_fixed_point_type) return universal_fixed;
  282.    -- function "/" (LEFT : any_fixed_point_type; RIGHT : any_fixed_point_type) return universal_fixed;
  283.  
  284.  
  285.       --  The  following  characters  form  the  standard  ASCII  character
  286.       set.   Character  literals -- corresponding to control characters are
  287.       not  identifiers;   they  are  indicated  in  italics  in   --   this
  288.       definition.
  289.  
  290.    type CHARACTER is
  291.  
  292.           (nul,  soh,  stx,  etx,     eot,  enq,  ack,  bel,
  293.            bs,   ht,   lf,   vt,      ff,   cr,   so,   si,
  294.            dle,  dc1,  dc2,  dc3,     dc4,  nak,  syn,  etb,
  295.            can,  em,   sub,  esc,     fs,   gs,   rs,   us,
  296.  
  297.            ' ',  '!',  '"',  '#',     '$',  '%',  '&',  ''',
  298.            '(',  ')',  '*',  '+',     ',',  '-',  '.',  '/',
  299.            '0',  '1',  '2',  '3',     '4',  '5',  '6',  '7',
  300.            '8',  '9',  ':',  ';',     '<',  '=',  '>',  '?',
  301.  
  302.            '@',  'A',  'B',  'C',     'D',  'E',  'F',  'G',
  303.            'H',  'I',  'J',  'K',     'L',  'M',  'N',  'O',
  304.            'P',  'Q',  'R',  'S',     'T',  'U',  'V',  'W',
  305.            'X',  'Y',  'Z',  '[',     '\',  ']',  '^',  '_',
  306.  
  307.            '`',  'a',  'b',  'c',     'd',  'e',  'f',  'g',
  308.            'h',  'i',  'j',  'k',     'l',  'm',  'n',  'o',
  309.            'p',  'q',  'r',  's',     't',  'u',  'v',  'w',
  310.            'x',  'y',  'z',  '{',     '|',  '}',  '',   del);
  311.  
  312.  
  313.        for CHARACTER use  --  128 ASCII character set without holes
  314.              (0, 1, 2, 3, 4, 5, ..., 125, 126, 127);
  315.  
  316.        -- The predefined operators for the type CHARACTER are the same as for any enumeration type.
  317.  
  318.  
  319.  
  320.  
  321.  
  322.  
  323.  
  324.  
  325.  
  326.  
  327.                                    C - 4
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334.  
  335.  
  336.    package ASCII is
  337.  
  338.       --  Control characters:
  339.  
  340.       NUL       : constant CHARACTER := NUL;       SOH        : constant CHARACTER := SOH;
  341.       STX       : constant CHARACTER := STX;       ETX        : constant CHARACTER := ETX;
  342.       EOT       : constant CHARACTER := EOT;       ENQ        : constant CHARACTER := ENQ;
  343.       ACK       : constant CHARACTER := ACK;       BEL        : constant CHARACTER := BEL;
  344.       BS        : constant CHARACTER := BS;        HT         : constant CHARACTER := HT;
  345.       LF        : constant CHARACTER := LF;        VT         : constant CHARACTER := VT;
  346.       FF        : constant CHARACTER := FF;        CR         : constant CHARACTER := CR;
  347.       SO        : constant CHARACTER := SO;        SI         : constant CHARACTER := SI;
  348.       DLE       : constant CHARACTER := DLE;       DC1        : constant CHARACTER := DC1;
  349.       DC2       : constant CHARACTER := DC2;       DC3        : constant CHARACTER := DC3;
  350.       DC4       : constant CHARACTER := DC4;       NAK        : constant CHARACTER := NAK;
  351.       SYN       : constant CHARACTER := SYN;       ETB        : constant CHARACTER := ETB;
  352.       CAN       : constant CHARACTER := CAN;       EM         : constant CHARACTER := EM;
  353.       SUB       : constant CHARACTER := SUB;       ESC        : constant CHARACTER := ESC;
  354.       FS        : constant CHARACTER := FS;        GS         : constant CHARACTER := GS;
  355.       RS        : constant CHARACTER := RS;        US         : constant CHARACTER := US;
  356.       DEL       : constant CHARACTER := DEL;
  357.  
  358.       -- Other characters:
  359.  
  360.       EXCLAM    : constant CHARACTER := '!';       QUOTATION  : constant CHARACTER := '"';
  361.       SHARP     : constant CHARACTER := '#';       DOLLAR     : constant CHARACTER := '$';
  362.       PERCENT   : constant CHARACTER := '%';       AMPERSAND  : constant CHARACTER := '&';
  363.       COLON     : constant CHARACTER := ':';       SEMICOLON  : constant CHARACTER := ';';
  364.       QUERY     : constant CHARACTER := '?';       AT_SIGN    : constant CHARACTER := '@';
  365.       L_BRACKET : constant CHARACTER := '[';       BACK_SLASH : constant CHARACTER := '\';
  366.       R_BRACKET : constant CHARACTER := ']';       CIRCUMFLEX : constant CHARACTER := '^';
  367.       UNDERLINE : constant CHARACTER := '_';       GRAVE      : constant CHARACTER := '`';
  368.       L_BRACE   : constant CHARACTER := '{';       BAR        : constant CHARACTER := '|';
  369.       R_BRACE   : constant CHARACTER := '}';       TILDE      : constant CHARACTER := '';
  370.  
  371.       -- Lower case letters:
  372.  
  373.       LC_A : constant CHARACTER := 'A';
  374.       ...
  375.       LC_Z : constant CHARACTER := 'Z';
  376.  
  377.    end ASCII;
  378.  
  379.  
  380.        -- Predefined subtypes:
  381.  
  382.        subtype NATURAL  is INTEGER range 0 .. INTEGER'LAST;
  383.        subtype POSITIVE is INTEGER range 1 .. INTEGER'LAST;
  384.  
  385.  
  386.  
  387.  
  388.  
  389.  
  390.  
  391.  
  392.  
  393.                                    C - 5
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400.  
  401.  
  402.        -- Predefined string type:
  403.  
  404.        type STRING is array(POSITIVE range <>) of CHARACTER;
  405.  
  406.        pragma PACK(STRING);
  407.  
  408.  
  409.        -- The predefined operators for this type are as follows:
  410.  
  411.        -- function "="  (LEFT, RIGHT : STRING) return BOOLEAN;
  412.        -- function "/=" (LEFT, RIGHT : STRING) return BOOLEAN;
  413.        -- function "<"  (LEFT, RIGHT : STRING) return BOOLEAN;
  414.        -- function "<=" (LEFT, RIGHT : STRING) return BOOLEAN;
  415.        -- function ">"  (LEFT, RIGHT : STRING) return BOOLEAN;
  416.        -- function ">=" (LEFT, RIGHT : STRING) return BOOLEAN;
  417.  
  418.        -- function "&" (LEFT : STRING;    RIGHT : STRING)    return STRING;
  419.        -- function "&" (LEFT : CHARACTER; RIGHT : STRING)    return STRING;
  420.        -- function "&" (LEFT : STRING;    RIGHT : CHARACTER) return STRING;
  421.        -- function "&" (LEFT : CHARACTER; RIGHT : CHARACTER) return STRING;
  422.  
  423.        type DURATION is delta IMPLEMENTATION_DEFINED range IMPLEMENTATION_DEFINED;
  424.  
  425.        -- The predefined operators for the type DURATION are the same as for any fixed point type.
  426.  
  427.  
  428.     -- The predefined exceptions:
  429.  
  430.    CONSTRAINT_ERROR : exception;
  431.    NUMERIC_ERROR    : exception;
  432.    PROGRAM_ERROR    : exception;
  433.    STORAGE_ERROR    : exception;
  434.    TASKING_ERROR    : exception;
  435.  
  436. end STANDARD;
  437.  
  438. Certain  aspects  of the predefined entities cannot be completely described
  439. in the language itself.  For example, although the enumeration type BOOLEAN
  440. can be written showing the two enumeration literals  FALSE  and  TRUE,  the
  441. short-circuit control forms cannot be expressed in the language.
  442.  
  443. Note:
  444.  
  445. The language definition predefines the following library units:
  446.  
  447.     -  The package CALENDAR                         (see 9.6)
  448.  
  449.     -  The package SYSTEM                           (see 13.7)
  450.     -  The package MACHINE_CODE (if provided)       (see 13.8)
  451.     -  The generic procedure UNCHECKED_DEALLOCATION (see 13.10.1)
  452.     -  The generic function UNCHECKED_CONVERSION    (see 13.10.2)
  453.  
  454.     -  The generic package SEQUENTIAL_IO            (see 14.2.3)
  455.     -  The generic package DIRECT_IO                (see 14.2.5)
  456.     -  The package TEXT_IO                          (see 14.3.10)
  457.  
  458.  
  459.                                    C - 6
  460.  
  461.  
  462.  
  463.  
  464.  
  465.  
  466.  
  467.  
  468.     -  The package IO_EXCEPTIONS                    (see 14.5)
  469.     -  The package LOW_LEVEL_IO                     (see 14.6)
  470.  
  471.  
  472.  
  473.  
  474.  
  475.  
  476.  
  477.  
  478.  
  479.  
  480.  
  481.  
  482.  
  483.  
  484.  
  485.  
  486.  
  487.  
  488.  
  489.  
  490.  
  491.  
  492.  
  493.  
  494.  
  495.  
  496.  
  497.  
  498.  
  499.  
  500.  
  501.  
  502.  
  503.  
  504.  
  505.  
  506.  
  507.  
  508.  
  509.  
  510.  
  511.  
  512.  
  513.  
  514.  
  515.  
  516.  
  517.  
  518.  
  519.  
  520.  
  521.  
  522.  
  523.  
  524.  
  525.                                    C - 7
  526.  
  527.  
  528.  
  529.  
  530.